package com.yuncheng.oaApi.service;

import com.yuncheng.oaApi.entity.OaSysFlowNode;
import com.yuncheng.common.base.service.BaseService;
import com.yuncheng.oaApi.entity.OaSysFlowTemple;
import com.yuncheng.oaApi.entity.OaSysJob;
import com.yuncheng.entity.YcSysOrg;
import com.yuncheng.oaApi.vo.Result;

import java.lang.reflect.InvocationTargetException;
import java.util.List;

/**
 * @Description: 流程节点
 * @Author: yuncheng
 * @Date: 2023-10-12
 * @Version: V1.0
 */
public interface IOaSysFlowNodeService extends BaseService<OaSysFlowNode> {

    /**
     *  添加第一个节点 自动添加
     * @param mbId  流程模板id
     */
    Result addFirstNode(String mbId);

    /**
     *  添加节点
     * @param oaSysFlowNode
     * @return
     * @throws InvocationTargetException
     * @throws IllegalAccessException
     */
    Result addNode(OaSysFlowNode oaSysFlowNode) throws InvocationTargetException, IllegalAccessException;



    /**
     * 当前所有配置部门
     * @return
     */
    List<YcSysOrg> getDepart();

    /**
     * 当前所有岗位
     * @return
     */
    List<OaSysJob> getJob();

    /**
     * 获取流程名称
     * @param mbId 流程模板id
     */
    String getLcmc(String mbId);

    /**
     * 当前节点所有数据
     * @param nowNodeid 当前节点id
     * @return
     */
    List<OaSysFlowNode> getNowNode(String nowNodeid);

    /**
     * 上一环节所有数据
     *@param nowNodeid 当前节点id
     * @return
     */
    List<OaSysFlowNode> getPreviousNode(String nowNodeid);

    /**
     *  获取下一环节所有数据
     * @param nowNodeid 当前节点id
     * @return
     */
    List<OaSysFlowNode> getNextNode(String nowNodeid);

    /**
     * 判断当前节点是否是最后一个节点
     * @param nowNodeId true 是最后一个节点 /  false 不是最后一个节点
     * @return
     */
    boolean endNode(String nowNodeId);

    /**
     * 级联删除
     * @param id
     * @return
     */
    void removeId(String id);


    /**
     *  通过流程模板id 获取第一个节点的所有数据
     * @param lcmbid 流程id
     * @return
     */
    List<OaSysFlowNode> getFirstNode(String lcmbid);


    /**
     * 通过流程编码 获取当前流程模板配置
     * @param lcmbCode
     * @return
     */
    OaSysFlowTemple getCode(String lcmbCode);

}
